/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javadoc; import java.lang.reflect.Method; import java.lang.reflect.Constructor; import java.util.List; import sun.tools.util.ModifierFilter; import com.sun.javadoc.*; import org.openide.TopManager; import org.openide.windows.OutputWriter; /** This class serves as workaround for package private accessibilty of class * <CODE>com.sun.tools.javadoc.RootDocImpl</CODE>. It creates new instance of RootDocImpl * through reflection Api. It also calls <CODE>static option(String[][])</CODE> * method for that class. * * @author Petr Hrebejk */ public class RootDocImplWrapper extends Object implements RootDoc { private RootDoc rdiInstance; private Class rdiClazz; private Constructor rdiConstructor; private Method rdiOptions; private OutputWriter out; private OutputWriter err; static final long serialVersionUID =-7498848877297162664L; public RootDocImplWrapper ( Object env, List userClasses, List userPkgs, ModifierFilter showAccess, List options ) { try { // Get the class rdiClazz = Class.forName( "com.sun.tools.javadoc.RootDocImpl" ); // NOI18N // Get the constructor and make it accessible Class envClazz = Class.forName( "com.sun.tools.javadoc.Env" ); // NOI18N Class constructorParams[] = new Class[] { envClazz, java.util.List.class, java.util.List.class, sun.tools.util.ModifierFilter.class, java.util.List.class }; rdiConstructor = rdiClazz.getDeclaredConstructor( constructorParams ); rdiConstructor.setAccessible( true ); // Get the option method and make it accesible Class optionsParams[] = new Class[] { java.util.List.class }; rdiOptions = rdiClazz.getDeclaredMethod( "options", optionsParams ); // NOI18N rdiOptions.setAccessible( true ); // Call the constructor Object constructorArgs[] = new Object[] { env, userClasses, userPkgs, showAccess, options }; rdiInstance = (RootDoc) rdiConstructor.newInstance( constructorArgs ); } catch (ClassNotFoundException e) { TopManager.getDefault().notifyException( e ); } catch (NoSuchMethodException e) { TopManager.getDefault().notifyException( e ); } catch (java.lang.reflect.InvocationTargetException e) { TopManager.getDefault().notifyException( e ); //System.out.println(e + " : " + e.getTargetException()); // NOI18N //e.getTargetException().printStackTrace(); } catch (IllegalAccessException e) { TopManager.getDefault().notifyException( e ); } catch (InstantiationException e ) { TopManager.getDefault().notifyException( e ); } } /** *@return Instance of RootDocImpl casted to interface com.sun.javadoc.RootDoc. */ public RootDoc getRootDoc() { return rdiInstance; } /** Sets output streams in otput tab */ public void setIO ( OutputWriter out, OutputWriter err ) { this.out = out; this.err = err; } /** Dynamic invocation of RootDocImpl.options( options ) ) */ public String[][] options( List options ) { Object optionsArgs[] = new Object[] { options }; try { return (String[][])rdiOptions.invoke( rdiClazz, optionsArgs ); } catch (IllegalAccessException e) { TopManager.getDefault().notifyException( e ); return null; } catch (java.lang.reflect.InvocationTargetException e) { TopManager.getDefault().notifyException( e ); //System.out.println(e + " : " + e.getTargetException()); // NOI18N //e.getTargetException().printStackTrace(); return null; } } // Wraper implementation Doc public String commentText() { return rdiInstance.commentText (); } public Tag[] tags() { return rdiInstance.tags (); } public Tag[] tags(String tagname) { return rdiInstance.tags (tagname);} public SeeTag[] seeTags() { return rdiInstance.seeTags ();} public Tag[] inlineTags() { return rdiInstance.inlineTags();} public Tag[] firstSentenceTags() { return rdiInstance.firstSentenceTags();} public String getRawCommentText() { return rdiInstance.getRawCommentText();} public void setRawCommentText(String rawDocumentation) { rdiInstance.setRawCommentText(rawDocumentation);} public String name() { return rdiInstance.name();} public int compareTo(Object obj) { return rdiInstance.compareTo(obj);} public boolean isField() { return rdiInstance.isField();} public boolean isMethod() { return rdiInstance.isMethod();} public boolean isConstructor() { return rdiInstance.isConstructor();} public boolean isInterface() { return rdiInstance.isInterface();} public boolean isException() { return rdiInstance.isException();} public boolean isError() { return rdiInstance.isError();} public boolean isOrdinaryClass(){ return rdiInstance.isOrdinaryClass();} public boolean isClass() { return rdiInstance.isClass();} public boolean isIncluded() { return rdiInstance.isIncluded();} // Wraper implemantation RootDoc public String[][] options() { return rdiInstance.options ();} public PackageDoc[] specifiedPackages() { return rdiInstance.specifiedPackages();} public ClassDoc[] specifiedClasses() { return rdiInstance.specifiedClasses();} public ClassDoc[] classes() { return rdiInstance.classes();} public PackageDoc packageNamed(String name) { return rdiInstance.packageNamed(name);} public ClassDoc classNamed(String qualifiedName) { return rdiInstance.classNamed(qualifiedName);} // Implementation DocErrorReporter public void printError(String msg) { err.println ( msg ); err.flush(); //Res.printError(msg); } public void printWarning(String msg) { err.println ( msg ); err.flush(); //Res.printWarning(msg); } public void printNotice(String msg) { out.println ( msg ); out.flush(); //Res.printNotice(msg); } } /* * Log * 8 Gandalf 1.7 1/13/00 Petr Hrebejk i18n mk3 * 7 Gandalf 1.6 1/12/00 Petr Hrebejk i18n * 6 Gandalf 1.5 1/10/00 Petr Hrebejk Bug 4747 - closing of * output tab fixed * 5 Gandalf 1.4 11/27/99 Patrik Knakal * 4 Gandalf 1.3 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 3 Gandalf 1.2 6/11/99 Petr Hrebejk * 2 Gandalf 1.1 6/9/99 Ian Formanek ---- Package Change To * org.openide ---- * 1 Gandalf 1.0 4/23/99 Petr Hrebejk * $ */